from django.http import JsonResponse

"""
###############
restful api
return JsonResponse({"code": 200, "message": string, "data": obj})
json_dumps_params={'ensure_ascii': False}:编码取消默认ascics
################
"""


class HttpCode:
    ok = 200  # 请求处理成功
    created = 201  # [POST/PUT/PATCH]：用户新建或修改数据成功。
    accepted = 202  # 表示一个请求已经进入后台排队（异步任务）
    no_content = 204  # [DELETE]用户删除数据成功。
    params_error = 400  # 黑名单/参数错误
    forbidden = 403  # [*] 表示用户得到授权（与401错误相对），但是访问是被禁止的。
    UNAUTHORIZED = 401  # 请求未认证，跳转登陆
    not_found = 404
    gone = 410  # 用户请求的资源被永久删除，且不会再得到的。
    un_procesable_entity = 422  # - [POST / PUT / PATCH]当创建一个对象时，发生一个验证错误。
    method_error = 405  # 方法错误
    server_error = 500  # 服务器发生错误，用户将无法判断发出的请求是否成功。


def result(code=HttpCode.ok, message=None, data=None, kwargs=None):
    # 重构JsonResponse
    json_data = {"code": code, "message": message, "data": data}
    if kwargs and isinstance(kwargs, dict) and kwargs.keys():
        json_data.update(kwargs)
    return JsonResponse(json_data, json_dumps_params={'ensure_ascii': False})


def ok(message=None, data=None, kwargs=None):
    """访问成功"""
    return result(message=message, data=data, kwargs=kwargs)


def created(message=None, data=None):
    """201 [POST/PUT/PATCH]：用户新建或修改数据成功。"""
    return result(code=HttpCode.created, message=message, data=data)


def accepted(message=None, data=None):
    """202 [POST/PUT/PATCH]：一个请求进入后台（异步任务）。"""
    return result(code=HttpCode.accepted, message=message, data=data)


def params_error(message=None, data=None):
    """400 黑名单"""
    return result(code=HttpCode.params_error, message=message, data=data,
                  kwargs=None)


def not_found(message=None, data=None):
    """404"""
    return result(code=HttpCode.not_found, message=message, data=data,
                  kwargs=None)


def forbidden(message=None, data=None):
    """403 表示用户得到授权（与401错误相对），但是访问是被禁止的,无权限"""
    return result(code=HttpCode.forbidden, message=message, data=data,
                  kwargs=None)


def un_auth(message=None, data=None):
    """401  # 请求未认证，跳转登陆"""
    return result(code=HttpCode.UNAUTHORIZED, message=message, data=data,
                  kwargs=None)


def gone(message=None, data=None):
    """410  # 用户请求的资源被永久删除，且不会再得到的"""
    return result(code=HttpCode.gone, message=message, data=data, kwargs=None)


def method_error(message=None, data=None):
    return result(code=HttpCode.method_error, message=message, data=data,
                  kwargs=None)


def server_error(message=None, data=None):
    return result(code=HttpCode.server_error, message=message, data=data,
                  kwargs=None)
